package com.woniuxy.enums.redis.user;

/**
 * @author 饶志
 * @version 1.0
 * @since 2025-07-12  10:06
 */
public enum UserRedisKeyEnum {

    /**
     * 用户统计信息缓存键（格式：user:stats:用户ID）
     */
    USER_STATS("user:stats:%s"),

    /**
     * 用户关注列表缓存键（格式：user:followList:用户ID:页码:每页大小）
     */
    FOLLOW_LIST("user:followList:userId:%s:currentPage:%s:size:%s"),

    /**
     * 用户粉丝列表缓存键（格式：user:fansList:用户ID:页码:每页大小）
     */
    FANS_LIST("user:fansList:userId:%s:page:%s:size:%s"),

    /**
     * 用户互关列表缓存键（格式：user:mutualFollowList:用户ID:页码:每页大小）
     */
    MUTUAL_FOLLOW_LIST("user:mutualFollowList:userId:%s:page:%s:size:%s"),

    /**
     * 用户推荐集合（储存用户关注的好友，Set类型）<br>
     * key格式：user:recommendation:{当前用户ID}<br>
     * value格式：当前用户关注好友ID集合
     */
    USER_RECOMMENDATION_LIST("user:recommendation:%s"),

    /**
     * 用户关注集合（储存用户关注的好友，Set类型）<br>
     * key格式：user:follow:{当前用户ID}<br>
     * value格式：当前用户关注好友ID集合
     */
    USER_FOLLOW_SET("user:follow:%s"),

    /**
     * 用户粉丝集合（储存用户关注的好友，Set类型）<br>
     * key格式：user:fan:{当前用户ID}<br>
     * value格式：当前用户关注好友ID集合
     */
    USER_FAN_SET("user:fan:%s"),
    ;

    private final String keyPattern;

    UserRedisKeyEnum(String keyPattern) {
        this.keyPattern = keyPattern;
    }

    // 生成具体的键(支持动态参数)
    public String format(Object... args) {
        return String.format(keyPattern, args);
    }
}
